﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using I3.AgenteIA.Aplicacao;
using I3.AgenteIA.Aplicacao.DTOs;

namespace I3.AgenteIA.Framework.Console
{
    public class LinguagemNaturalController : BaseController
    {
        /// <summary>
        /// Armazena a instancia da classe de aplicação que 
        /// analisa o processamento morfologico.
        /// </summary>
        private AnalisarProcessamentoMorfologico _analisarProcessamentoMorfologico;

        /// <summary>
        /// Construtor padrão da classeC:\Work\Projetos\Agente IA\FONTES\I3.AgenteIA\I3.AgenteIA.Framework.Console\LinguagemNaturalController.cs
        /// </summary>
        public LinguagemNaturalController(IConsoleAdapter console, AnalisarProcessamentoMorfologico analisarProcessamentoMorfologico)
            : base(console) 
        {
            _analisarProcessamentoMorfologico = analisarProcessamentoMorfologico;
        }

        public string[] MensagemInicial
        {
            get
            {
                return new string[] {  
                    "Iniciando o modulo de análse.",
                };
            }
        }

        public string[] MensagemInicioAnalise
        {
            get
            {
                return new string[] {  
                    "Informe uma frase"
                };
            }
        }

        public void Executar()
        {
            base.EscreverMensagem(this.MensagemInicial);

            while(true)
            {
                base.EscreverMensagem(this.MensagemInicioAnalise);    

                string texto = base._console.Ler();

                SinteseMorfologicaDTO sinteseMorfologicaDTO = _analisarProcessamentoMorfologico.ObterSinteseDoProcessamento(texto);

                this.ExibirResultado(sinteseMorfologicaDTO);

            }
        }

        /// <summary>
        /// Exibe o resultado sintetico da analise morfologica realizada.
        /// </summary>
        /// <param name="sinteseMorfologicaDTO">Resultado sintético da analise morfologica</param>
        public void ExibirResultado(SinteseMorfologicaDTO sinteseMorfologicaDTO)
        {
            string exibicao = @"
            Exibindo o resultado da analise realizada

            ===================================================================

                {0}

                Qtde de Orações......: {1}
                Qtde de sentenças....: {2}
                Qtde de elementos....: {3}

                Horario Inicio.......: {4}
                Horário Termino......: {5}
                Tempo de Execução....: {6}

            ===================================================================
            ";


            base.EscreverMensagem(new String[] { String.Format(exibicao,  sinteseMorfologicaDTO.Oracao,sinteseMorfologicaDTO.QtdeDeOracoes, sinteseMorfologicaDTO.QtdeDeSentencas, sinteseMorfologicaDTO.QtdeDeElementos, sinteseMorfologicaDTO.InicioProcessamento, sinteseMorfologicaDTO.TerminoProcessamento, sinteseMorfologicaDTO.TempoExecucao) });
        }
    }
}
